package common.utils;


import common.exception.BaseException;
import common.result.ResultCodeEnum;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
/**
 * @author 清风明月
 * @Package com.lzw.breezeNovel.common.utils
 * @date 2025/5/17
 * @description 密码加密工具类
 */
@SuppressWarnings("all")
public class PasswordUtil {

    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    /**
     * 对密码进行加密
     *
     * @param rawPassword 原始密码
     * @return 加密后的密码
     */
    public static String encodePassword(String rawPassword) {
        return encoder.encode(rawPassword);
    }

    /**
     * 验证密码是否正确
     *
     * @param rawPassword     原始密码
     * @param encodedPassword 加密后的密码
     * @return 是否匹配
     */
    public static boolean matches(String rawPassword, String encodedPassword) {
        return encoder.matches(rawPassword, encodedPassword);
    }

    /**
     * 校验密码的复杂度6-18必须有大小写和数字
     * @param password
     */
    public static String validatePassword(String password) {
        //校验密码长度
        if (password.length() < 6 || password.length() > 18) {
            throw new BaseException(ResultCodeEnum.APP_PASSWORD_LENGTH_ERROR);
        }
        //校验密码复杂度
        if (!password.matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{6,18}$")) {
            throw new BaseException(ResultCodeEnum.APP_PASSWORD_COMPLEXITY_ERROR);
        }
        //对密码进行加密
        return encodePassword(password);

    }
}